मैंने pyFirmata संस्करण के बजाय Arduino भाषा का उपयोग करना शुरू कर दिया है। मैं एक Arduino UNO का उपयोग कर रहा हूं। मैं एक ही समस्या में भाग गया हूं, और वह यह है कि ओएलईडी काम नहीं करेगा। मैंने 2 अलग-अलग OLED की कोशिश की है, एक UCTRONICS से और एक HiLetGo से। वे दोनों I2C 128x64 OLED हैं, और UCTRONICS एक पीला और नीला है जबकि HiLetGo एक सफेद है। मैंने 2 अलग-अलग कोड आज़माए हैं, एक जो मैंने बनाया है और एक उदाहरण ssd1306 लाइब्रेरी से है। कोई त्रुटि नहीं है, OLEDs बस प्रकाश नहीं करते हैं। बोर्ड 4 टच सेंसर से जुड़ा है जो मैं उसी प्रोजेक्ट के लिए उपयोग कर रहा हूं लेकिन उनके साथ (अभी तक) कुछ भी गलत नहीं है। मैंने अभी कुछ समय के लिए समस्या निवारण किया है, और मैं यह पता लगाने में सक्षम हूं कि त्रुटि कहां है (शायद) स्थित है। यह मेरा कोड है: (भले ही ssd1306 I2C 128x64 उदाहरण भी काम नहीं करता है।) मुझे ऐसे सुझाव भी नहीं चाहिए जिनके लिए अतिरिक्त हार्डवेयर की आवश्यकता हो जो मेरे पास नहीं है, जैसे RTC (भले ही यह इससे संबंधित नहीं है कि एकमात्र उदाहरण था जिसके साथ मैं आ सकता था) यह मेरा कोड है: (भले ही ssd1306 I2C 128x64 उदाहरण भी काम नहीं करता है।)

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>

#define OLED_RESET 4
#define sw 128
#define sh 64
Adafruit_SSD1306 display(sw, sh, &Wire, OLED_RESET);

void setup() {
  Serial.begin(9600);
  Wire.begin();
  display.begin(SSD1306_SWITCHCAPVCC, 0x78);
  display.cp437(true);
  pinMode(A4, OUTPUT);


}

void loop() {
  digitalWrite(A4, HIGH);
  display.clearDisplay();
  display.setTextColor(WHITE);
  display.setTextSize(1);
  display.setCursor(0, 0);
  display.println("test");
  Serial.println("test");
  digitalWrite(A4, LOW);

}

हमेशा की तरह, मेरे पास इसे ठीक करने के लिए केवल 1 सप्ताह का समय है इसलिए सहायता की बहुत सराहना की जाएगी।

1
Kinda Clueless Guy 2 पद 2019, 19:30

3 जवाब

सबसे बढ़िया उत्तर

आपकी I2C पता सेटिंग गलत दिखाई देती है। Arduino's Wire लाइब्रेरी (doc) 7 बिट एड्रेस का उपयोग करती है। अंतिम बिट रीड/राइट बिट है और Wire स्वचालित रूप से इसका ख्याल रखता है। इसलिए, आप कम से कम महत्वपूर्ण बिट को काटना चाहते हैं और पते को 0x78 के बजाय 0x3C पर सेट करना चाहते हैं।

Adafruit_SSD1306 लाइब्रेरी वास्तव में डिफ़ॉल्ट पते के रूप में 0x3C का उपयोग करती है। begin() के लिए .h और .cpp फाइलों में डिक्लेरेशन और नोट्स देखें।

अधिक जानकारी के लिए, मेरा सुझाव है कि SSD1306 डेटा शीट देखें। यहाँ I2C डेटा प्रारूप है। देखें कि दास का पता कैसे स्वरूपित किया जाता है।

enter image description here

1
Kentaro Okuda 4 पद 2019, 04:46
मुझे लगता है कि मैं यह कोशिश कर सकता हूं लेकिन OLED के पीछे यह 0x78 कहता है इसलिए मैंने इसे वहीं रखा। हालांकि मैं अभी भी इसे बदलने की कोशिश कर सकता हूं।
 – 
Kinda Clueless Guy
4 पद 2019, 01:18
अंतिम बिट रीड/राइट बिट है। Arduino स्वचालित रूप से इसका ख्याल रखता है। यदि आप UCTRONICS की डेटा शीट पढ़ते हैं, तो यह कहता है "I2C स्लेव एड्रेस डिफ़ॉल्ट रूप से 8 बिट एड्रेस 0x78 (7 बिट एड्रेस 0x3C) के साथ सेट है।"
 – 
Kentaro Okuda
4 पद 2019, 04:10
डेटाशीट से वह छवि सिर्फ भ्रमित करने वाली है (पूरी डेटाशीट के रूप में) और सही नहीं है ... Co मल्टीबाइट ट्रांसफर के लिए काम नहीं करता है (इसे I2C पर बेकार बना देता है) भी LCD पहले BYTE के बाद ACK सिग्नल नहीं भेजता है। .. नियंत्रण BYTE केवल एक बार भेजा जाता है हर दूसरे BYTE को नहीं ...
 – 
Spektre
12 मई 2020, 14:07
मैंने कभी भी SSD1306 का उपयोग नहीं किया है और यह नहीं बता सकता कि डेटाशीट गलत है या नहीं। मैं केवल यह दिखाने का इरादा रखता हूं कि दास का पता कैसे स्वरूपित किया जाता है। लेकिन क्या आप सुनिश्चित हैं कि बाइट प्राप्त करने के बाद यह एसीके नहीं है? मुझे लगता है कि मास्टर अभी भी 9वीं घड़ी की नाड़ी उत्पन्न करता है। यह कैसे काम करेगा? कृपया मुझे शिक्षित करें। मैं उत्सुक हूँ।
 – 
Kentaro Okuda
12 मई 2020, 16:55
1
Saat ini saya memiliki "gaya busana lama":
 – 
Spektre
13 मई 2020, 00:02

यह हर बार हार्डवेयर की गलती नहीं है, प्रोग्राम को भी जांचें। उदाहरण परीक्षण कार्यक्रम लोड करें और पुनः प्रयास करें। https://iotforgeeks.com/i2c-oled-display-not-working/< /a> ने मुझे उसी मुद्दे को हल करने में मदद की।

0
Abhishek Patil 30 नवम्बर 2020, 14:41

हां, ये डिस्प्ले बहुत परेशान कर सकते हैं। मैंने खुद इसका अनुभव किया है।

सबसे पहले, आपूर्तिकर्ता की वेबसाइट पर जाएं और देखें कि क्या वे उपयोग करने के लिए किसी विशिष्ट पुस्तकालय का सुझाव देते हैं। मुझे जिन कुछ मुख्य मुद्दों का सामना करना पड़ा वे हैं:

  • स्क्रीन की आपूर्ति वोल्टेज आपके द्वारा अपेक्षित मानक 5V नहीं बल्कि उच्च या निम्न है। यदि यह कम है या आपने 3.3V पावर के लिए 5V की आपूर्ति की है तो हो सकता है कि आपने डिस्प्ले को क्षतिग्रस्त या तोड़ दिया हो।
  • आपने एसडीए/एसडीएल तारों को चालू कर दिया है, कुछ तारों को जोड़ना भूल गए हैं या एक दोषपूर्ण जमीन है। क्या बैकलाइट काम करता है?
  • पुस्तकालय गलत घड़ी की गति का उपयोग करता है
  • I2C पता जिस पर डिस्प्ले सुन रहा है वह लाइब्रेरी में उपयोग किए जाने वाले से अलग है (यह मेरे लिए सबसे आम है)
0
Anteino 2 पद 2019, 23:38
मुझे नहीं पता कि मेरे पास बैकलाइट है या नहीं क्योंकि यह OLED है। शायद आप कुछ और बात कर रहे हैं?
 – 
Kinda Clueless Guy
4 पद 2019, 01:20
इसके अलावा मैंने पहले 5.0 वोल्ट का इस्तेमाल किया लेकिन मैंने इसे 3.3 में बदल दिया लेकिन मुझे पता है कि आप कह रहे हैं कि 5.0 वी ने ओएलईडी को तोड़ दिया होगा।
 – 
Kinda Clueless Guy
4 पद 2019, 01:21
मैं इस arduino सामान के लिए नया हूँ इसलिए मुझे नहीं पता कि क्लॉकस्पीड से आपका क्या मतलब है। क्या यह बॉड दर की तरह है?
 – 
Kinda Clueless Guy
4 पद 2019, 01:23
{(None, data)} adalah larik berukuran satu. Apa yang Anda ulangi?
 – 
Kinda Clueless Guy
4 पद 2019, 01:24
SSD1306 LCDs मेरे पास बिना किसी समस्या के 5V और 3.3V के साथ काम है (यहां तक ​​​​कि डेटाशीट के अनुसार यह कोई समस्या नहीं है)। मेरी शीर्ष घड़ी की गति 150/2 किलोहर्ट्ज़ है, लेकिन यह वायरिंग, एसडब्ल्यू जिटर और सामान के आसपास सीमित हो सकती है और एलसीडी ही नहीं। बहुत धीमी गति से भी परेशानी होती है। सामान्य पता 0x3C है लेकिन आपको पते की जांच करनी चाहिए (ऑटोडेट)
 – 
Spektre
13 मई 2020, 11:09