คือผมทดสอบ attiny85 ตาม web ที่เขียนไว้ได้แล้ว แต่ว่าจะแสดงค่าที่อ่านได้จากการอ่าน analogRead(A0);
เหมือน ATMEGA328 ทั่วไปครับ ใช้ IDE Ver 1.0.5 เพราะว่า attiny 85 ไม่รองรับคำสั่ง Serial.begin(9600);
Attiny ไม่มีขา Hardware Serial สามารถใช้ Software Serial ได้ที่ความเร็วบอร์ดเรทสูงสุด 9600 ครับ
ลองแล้วครับ แต่ output ออกมาเป็นภาษา ขอม ??????????? ถาษาต่างด้าวครับ
ความเร็วบอร์ดเรทสูงสุด 9600 ก็แล้ว เปลี่ยนทุก speed แล้วก็ยังอ่านไม่เป็นตัวครับ หรือว่าผม set ผิดตรงไหน
รบกวนต่อครับดู code ให้หน่อยคือผม ทดสอบวนลูปส่งข้อมูลจาก attiny85 ขา3 ของ ic (Pin#4) แล้วใช้ UNO รับเข้าทางขา 3 ค่าที่รับเข้ามามันอ่านไม่ตรงมันอ่านค่าเป็น 0 128 ลองสลับขา RX TX แล้ว ขั้นตอนผมดังนี้
1. ***
ในส่วนของ code attiny85 ใช้ UNO เป็นตัวเบริน**
/* Code ในส่วนของ attiny 85 TX..... */
#include <SoftwareSerial.h>
SoftwareSerial mySerial(3, 4); // RX, TX
int pwm = 0;//ขา 5 ic
int analogInPin =A1;// ขา 7 รับค่าจาก VR แล้วส่งออกค่าขา 5 ic
void setup()
{
inMode(pwm, OUTPUT);
pinMode(analogInPin, INPUT);
mySerial.begin(4800);
}
void loop()
{
int analogIn = analogRead(analogInPin); // Read analog voltage on pin 2 (A1)
analogWrite(pwm, analogIn / 4); // Output analog reading to dimmable LED
mySerial.write(analogIn);//ส่งข้อมูลที่อ่านให้ UNO R3 ขา 4 attiny85
delay(100);
}// End loop
2.*************************************
/* Code ในส่วนของ UNO R3 RX..... */
#include <SoftwareSerial.h>
SoftwareSerial mySerial(3,4); // RX, TX ลองสลับขาดูแล้วกลัวต่อขาชนกัน
int incomingByte = 0; // for incoming serial data
void setup() {
Serial.begin(9600);
mySerial.begin(4800);
}
void loop() {
if (mySerial.available() > 0)
{
incomingByte = mySerial.read();
Serial.println(incomingByte,DEC);
// Serial.println(incomingByte);
//ลองปรับค่า VR ค่าที่รับได้แสดงไม่ถูกต้อง มันอ่านได้ 2 ค่า เท่านั้น คือ 0 และ 128
}
}//End void loop
3.******************************
ทำการต่อ Hardware ใหม่ ระหว่าง tx rx ของ UNO =====> rx tx ของ attiny85
ตาม code attiny85 อ่านค่าจาก VR ขา A1 ส่งออกทาง ขา pwm ตามค่าที่ปรับได้ปกติ พร้อมกับส่งข้อมูลทาง SoftwareSerial mySerial(3, 4); //RX,TX ไปให้ UNO รับเข้ามา ค่าปกติมันน่าจะอยู่ระหว่าง 0-1024 ใช่ไหมครับ แต่มันอ่านไม่เป็นตามนั้นครับ
***************** ค่าที่อ่านได้เป็นแบบนี้ครับ
0
128
0
128
128
/**********************
ไม่ทราบว่าผิดตรงไหนครับ
แบ่งเป็น 2 ส่วนนะครับ
1. ส่วนที่ถามมา การแสดงค่าผ่าน serial ดูจากข้อมูลแสดงว่าทำได้แล้ว
2. ส่วนที่ถามเพิ่มเติม ผมบอกให้ไม่ได้ว่าผิดตรงไหน การอ่านค่า analog ลองตามในเว็บก่อน แล้ว debug ดูทีละขั้น ได้ผลยังไงแชร์ด้วยนะครับ
ok ผมจะ debug ดูสำเร็จจะแชร์ให้ครับ อย่างน้อยผมก็ไม่หลงทางใช่มั้ยครับ
มาช่วยกันวิเคราะห็ดีมั้นครับ ผมงงๆๆ ประเด็นที่คงสัย
1. Speed ไม่ตรงกัน
2. การต่อ Hardwave ไม่น่ามีปํญหา
3.code ในส่วนของ attiny85 เวลาปรับค่า VR แล้ว out ที่ analogWrite(pwm, analogIn / 4); มันก็หรี่ไฟ ตามค่าที่ปรับ
ตอนนี้ผมไม่รู้จะ debug อย่างไร สงสัยต้อง เริ่มไหม่ก่อน ผมจะทดทอบในส่วนของ code SoftwareSerial ก่อน แต่จะใช้ Broad UNO R ทั้งด้าน ส่ง และ รับ ว่ามีปํญหามั้ย..!! แล้วค่อยว่าเรื่องของ attiny85 อีกทีครับ
ยังสรุปไม่ได้ครับ มันเป็นงงๆ ปัญหาอยูที่ SoftwareSerial ตัวนี้หรือเปล่า ผมไม่เข้าใจว่าทำไหมต้องกำหนดขา tx rx ให้เหมือนกันจึงจะรับข้อมูลได้ และการรับข้อมูลก็ไม่ครบหลักด้วย คือผมพิมพ์ 123456789 กดส่ง ค่าที่รับได้ เป็น 1239 แถมต้องเป็นแบบ one way ด้วย งงๆๆๆๆๆๆๆๆๆๆๆๆ
***************** code BROAD UNO รับข้อมูล ***********
#include <SoftwareSerial.h>
//SoftwareSerial mySerial(10, 11); // RX, TX แบบนี้รับข้อมูลไม่ได้ สลับขา tx rx ดูแล้ว
SoftwareSerial mySerial(10, 10); // RX แบบนี้รับข้อมูลได้ แต่เป็นแบบ one way
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(57600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
Serial.println("Goodnight moon!");
// set the data rate for the SoftwareSerial port
mySerial.begin(4800);
mySerial.println("Hello, world COM3");
}
void loop() // run over and over
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}
**************************** BROAD PRO Mini ส่งข้อมูล
#include <SoftwareSerial.h>
//SoftwareSerial mySerial(11, 10); // RX, TX
SoftwareSerial mySerial(11, 10); // TX
void setup()
{
// Open serial communications and wait for port to open:
Serial.begin(57600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
Serial.println("Goodnight moon!");
// set the data rate for the SoftwareSerial port
mySerial.begin(4800);
mySerial.println("Hello, world COM4");
}
void loop() // run over and over
{
if (mySerial.available())
Serial.write(mySerial.read());
if (Serial.available())
mySerial.write(Serial.read());
}
คุณเจ้าของร้านครับ อยากคุยกับคุณเรื่อง SoftwareSerial ผมมีข้อถามนิดหน่อยรบกวนสัก 5 นาที ช่วย ส่งเบอร์โทร ทาง e-mail sawoey.p@gmail.com ให้ผมได้ไหม ยังไม่ยอมต้องรู้ว่ามันเป็นอะไรแน่....